package Negocio;

import java.util.*;

import javax.swing.JOptionPane;

public class OrdenVenta extends Orden{
	
	public Datos.OrdenVenta oDatos;

	public float GetMontoOrden(Entidades.OrdenVenta orden) throws Exception{
		float monto=0;
		List aDatos = orden.getDetalleOrdenVenta();
		Negocio.DetalleOrdenVenta nDetalleOrdenVenta = null;
		Entidades.DetalleOrdenVenta eDetalleOrdenVenta = null;
		while(!aDatos.isEmpty()){
			eDetalleOrdenVenta = (Entidades.DetalleOrdenVenta) aDatos.remove(0);
			monto= monto + nDetalleOrdenVenta.GetMonto(eDetalleOrdenVenta);
		}
		return monto;
	}
	public Entidades.OrdenVenta Nuevo (String plz, Entidades.Comitente comitente, String tasa, List cpds){
		
		Entidades.DetalleOrdenVenta detalle = null;
		List detalles =  new ArrayList();
		for (int i=0; i<cpds.size();i++){
			detalle = new Entidades.DetalleOrdenVenta((Entidades.CPD) cpds.get(i));
			detalles.add(detalle);
		}
		
		Date now = new Date();
		Entidades.EstadoOrden estado = new Entidades.EstadoOrden (1,"Pendiente Activacion");
		Entidades.Personal personal = Inicio.getpersonalIngresado();
		Entidades.Segmento segmento = ((Entidades.CPD) cpds.get(0)).getSegmento(); 
				
		String consulta = "";
		List maxOrden = null;
		int maxIdOrden=0;
		int maxNroOrden=0;
		try {
			consulta = "SELECT * FROM orden WHERE idOrden=(SELECT MAX(idOrden) FROM orden);";
			maxOrden = (new Negocio.Orden()).Consulta(consulta);
			Entidades.Orden orden = null;
			if (maxOrden.isEmpty()){
				maxIdOrden=1;
			} else {
				int i=0;
				while(maxOrden.size()!=i){
					orden = (Entidades.Orden) maxOrden.get(i);
					maxIdOrden=orden.getIdOrden()+1;
					maxNroOrden=orden.getNroOrden()+1;
					i++;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		Entidades.OrdenVenta orden = new Entidades.OrdenVenta(maxIdOrden, maxNroOrden, new Date(0), now, Integer.parseInt(plz), estado, comitente, personal, segmento, Float.parseFloat(tasa), detalles);
		Negocio.Orden aDatos = new Negocio.Orden();
		try {
			aDatos.Add(orden);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		for (int i=0;i<detalles.size();i++){
			detalle = new Entidades.DetalleOrdenVenta((Entidades.CPD) cpds.get(i));
			new Negocio.DetalleOrdenVenta().Nuevo(maxNroOrden, (i+1), detalle);
		}
		return orden;
	}
	public List buscarCPD(List ordenes, String idCPD) throws Exception{
		List oCPDs = new ArrayList();
		Entidades.Orden orden;
		Entidades.OrdenVenta ordenVenta;
		int i = 0;
		while(i<ordenes.size()){
			orden = (Entidades.Orden) ordenes.get(i);
			if (orden.getClass().getName()=="Entidades.OrdenVenta"){
				ordenVenta = (Entidades.OrdenVenta) orden;
				List<Entidades.DetalleOrdenVenta> aDatos = ordenVenta.getDetalleOrdenVenta();
				if (aDatos!=null){
					if (!aDatos.isEmpty()){
						int f=0;
						Entidades.DetalleOrdenVenta detalle = null;
						Entidades.CPD cpd = null;
						while(aDatos.size()!=f){
							detalle = aDatos.get(f);
							cpd = detalle.getCPD();
							System.out.println("CPD a buscar: " + idCPD + "  CPD buscado: " + cpd.getIdCPDNegociacion());
							if(idCPD.equals(cpd.getIdCPDNegociacion())){
								oCPDs.add(cpd);
							}
							f++;
						}
					}					
				}	
			}
			i++;
		}
		try{
			return oCPDs;
		}finally {
			oCPDs = null;
		}
	}
	public List buscarOrdenContieneCPD(List ordenes, String idCPD) throws Exception{
		List oOrdenes = new ArrayList();
		Entidades.Orden orden;
		Entidades.OrdenVenta ordenVenta;
		int i = 0;
		while(i<ordenes.size()){
			orden = (Entidades.Orden) ordenes.get(i);
			if (orden.getClass().getName()=="Entidades.OrdenVenta"){
				ordenVenta = (Entidades.OrdenVenta) orden;
				List<Entidades.DetalleOrdenVenta> aDatos = ordenVenta.getDetalleOrdenVenta();
				if (aDatos!=null){
					if (!aDatos.isEmpty()){
						int f=0;
						Entidades.DetalleOrdenVenta detalle = null;
						Entidades.CPD cpd = null;
						while(aDatos.size()!=f){
							detalle = aDatos.get(f);
							cpd = detalle.getCPD();
							//System.out.println("CPD a buscar: " + idCPD + "  CPD buscado: " + cpd.getIdCPDNegociacion());
							if(idCPD.toUpperCase().equals(cpd.getIdCPDNegociacion())){
								oOrdenes.add(ordenVenta);
							}
							f++;
						}
					}					
				}	
			}
			i++;
		}
		try{
			return oOrdenes;
		}finally {
			oOrdenes = null;
		}
	}
	public List buscarOrdenes(Entidades.EstadoOrden estadoOrden) throws Exception{
		String consulta;
		int estado = estadoOrden.getIdEstadoOrden();
		consulta = "SELECT * FROM orden WHERE idEstadoOrden=" + estado + ";";
		return Consulta(consulta);
	}
}